在私人的訊息中,機器人仍然可以觸發user_command 的應用程式,
但為了控制錯誤訊息等,還是能去控制回覆或處理方式
加入:
@commands.guild_only() # 伺服器專用
->
@Bot.user_command(name="簽到資訊", description="顯示該成員的簽到資訊")
@commands.has_permissions(administrator=True)
@commands.is_owner() # 管理員才能用
@commands.guild_only() # 伺服器專用
async def get_member_info(ctx, member: discord.Member):
await ctx.send_response("功能處理", ephemeral=True)
而錯誤訊息為 commands.NoPrivateMessage
# 使用上方宣告的user_command 的function name 宣告屬性 @[functionName].error
@get_member_info.error
async def get_member_info_error(ctx, error):
print(error)
if isinstance(error, commands.NoPrivateMessage):
await ctx.send_response("這個只能在伺服器裡才能用", ephemeral=True)
else:
await ctx.send_response("你沒有權限喔www不可以偷偷來", ephemeral=True)
還能檢查的參數那下面會挑幾個來寫
檢查方式,並代入function
def check_if_it_is_me(ctx):
return ctx.message.author.id == 85309593344815104
@bot.command()
@commands.check(check_if_it_is_me)
async def only_for_me(ctx):
await ctx.send('I know you!')
另一個寫法
def is_me():
def predicate(ctx):
return ctx.message.author.id == 85309593344815104
return commands.check(predicate)
@bot.command()
@is_me()
async def only_me(ctx):
await ctx.send('Only you!')
可以一次性的檢查所有下的條件,例如前面的is_onwer、guild_only、也可以包含@commnads.check本身
一個是根據頻道權限不分在私人還是伺服器/ 一個是指伺服器的成員權限,像是 是否有管理權限?是否有踢人權限,詳細可以參考權限表。
權限劃分很多,所以主要如果有疑慮,還是可以直接就 administrator(管理員) 跟不分就可以,剩下可以在DC 伺服器設定去調整。
※伺服器設定 > 整合 > 機器人和應用程式 > 指令點下去 > 新增身分組
只能在伺服器使用,不需代入任何內容。
只能在私人消息、頻道使用,不需代入任何內容。
機器人所有者